向量算术
在3.7.1节里描述的 vector
的设计是为了作为一种保存值的一般性机制,那里追求的是灵活性,以及能融入容器、迭代器和算法的体系结构之中。但是它并不支持数学的向量运算。将这些运算添加到 vector
上并不难,但是它的一般性和灵活性会妨碍优化,而优化对于所有重要的数值工作都是最基本的东西。由于这一情况,标准库提供了一种称为 valarray
的向量。它不那么通用,但却更容易适应数值计算的优化
template<class T> class valarray
{
// ...
T& operator[](size_t);
// ...
};
类型 size_t
是实现中用于表示数组下标的无符号整数类型。
这里也支持 valarray
的常规算术运算和最常用的数学函数。例如,
// 取自<valarray>的标准的绝对值函数
template<class T> valarray<T> abs(const valarray<T>&);
void f(valarray<double>& al, valarray<double>& a2)
{
valarray<double> a = a1 * 3.14 + a2/a1;
a2 += a1 * 3.14;
a = abs(a);
double d = a2[7];
// ...
}
更多的细节见22.4节
🔚